const {vehicle,mixin} = require("./object_by_mixin.js")
/**
 * 使用 node polymorphism.js 来执行本次测试
 *
 * 混入这里采用的是浅复制
 * 浅复制完成之后，对源对象的普通操作都不再影响子对象
 * 但如果是浅复制只复制了属性引用的情形，那么父对象和子对象还是会共享这一对象（比如父子对象共享数组）
 * 所以并不能完全模拟面向对象中的复制机制
 * @type {*}
 */
let polymorphismCar = mixin(vehicle,{
    engines:4,
    drive(){
        /* 显式调用实现多态
         可以使用显式多态实现多继承，尽量只在一个地方使用显式调用
         否则会显著增加维护成本
         使用伪多态通常会导致代码变得更加复杂、难以阅读并且
            难以维护，因此应当尽量避免使用显式伪多态，因为这样做往往得不偿失。

        */
        vehicle.drive.call(this)
        console.log("驾驶",this.engines,"缸发动机的汽车")
    }
})


polymorphismCar.drive()

